package P_2023_03_01;

// 1.创建一个长度为 3 的数组

//2.创建学生对象

//3.把学生对象添加到数组中

//4.再次创建一个学生对象

//5.判断 id 唯一性
//5.1 已存在 --- 提示重复
//5.2 不存在 --- 添加学生对象

//6.添加学生对象
//6.1 老数组已经存满 --- 创建新数值再添加
//6.2 老数组没有存满 --- 直接添加


import java.util.Scanner;

public class StudentTest {
    public static void main(String[] args) {
        //定义一个储存 3 个学生的数组
        Student[] arrStu = new Student[3];
        //添加 3 个学生
        Student stu1 = new Student(1, "张三", 23);
        Student stu2 = new Student(2, "李四", 24);
        Student stu3 = new Student(3, "王五", 25);

        arrStu[0] = stu1;
        arrStu[1] = stu2;
        arrStu[2] = stu3;
        //再次添加 1 个学生
        Student stu4 = new Student(4, "张柳", 26);
        boolean exist = contains(arrStu, stu4.getAge());

        //存在--不用添加
        if (exist) {
            System.out.println("当前 id 重复， 请修改 id 后再添加");
        } else {
            //不存在--添加
            int count = getCount(arrStu);
            if (count == arrStu.length) {
                //数组满了--创建新数组在添加
                Student[] newArrStu = createNewArr(arrStu);
                newArrStu[count] = stu4;
                printArr(newArrStu);
            } else {
                //数组未满-- 直接添加
                arrStu[count] = stu4;
                printArr(arrStu);
            }
        }

        //要求3 根据 id， 删除指定 id
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你要删除的id:");
        int sid = sc.nextInt();
        int index = getIndex(arrStu, sid);
        if (index != -1) {
            //存在，删除
            arrStu[index] = null;
            printArr(arrStu);
        } else {
            //不存在
            System.out.println("当前 id 不存在， 删除失败！");
        }

        //要求5 查询数组 id 为 2 的学生， 如果存在， 则年龄加 1
        System.out.println("请输入年龄需要 +1 的学生 id: ");
        sid = sc.nextInt();
        index = getIndex(arrStu, sid);
        if (index != -1) {
            arrStu[index].setAge(arrStu[index].getAge() + 1);
        } else {
            System.out.println("当前 id 学生不存在！");
        }
        printArr(arrStu);
    }

    //定义方法判断该学生是否存在
    public static boolean contains(Student[] arr, int id) {
        for (int i = 0; i < arr.length; i++) {
            Student stu = arr[i];
            if (stu != null) {
                int sid = stu.getId();
                if (sid == id) {
                    return true;
                }
            }
        }
        return false;
    }

    //判断数组中哟普几个元素
    public static int getCount(Student[] arr) {
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] != null) {
                ++count;
            }
        }
        return count;
    }

    //创建一个新数组
    public static Student[] createNewArr(Student[] arr) {
        Student[] newArr = new Student[arr.length + 1];
        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i];
        }
        return newArr;
    }

    //打印数组元素
    public static void printArr(Student[] arr) {
        for (int i = 0; i < arr.length; i++) {
            Student stu = arr[i];
            if (stu != null) {
                System.out.println(stu.getId() + "," + stu.getName() + "," + stu.getAge());
            }


        }
    }

    //获得删除 id 对应的索引
    public static int getIndex(Student[] arr, int id) {
        for (int i = 0; i < arr.length; i++) {
            Student stu = arr[i];
            if (stu != null) {
                int sid = stu.getId();
                if (sid == id) {
                    return i;
                }
            }
        }
        return -1;
    }

}